# -*- coding: utf-8 -*-

import redis


pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)


r.set('name', 'runoob', ex=3600) 
print(r['name'])
print(r.get('name')) 



tar_item = {
    'name': 'test_name',
    'age': 2
}
r.hmset('student1', tar_item)
tmp_data = r.hgetall('student1')
print(tmp_data)

#在列表左端依次加入
r.lpush('test_list2',0,1,2,3,4)
#在列表右端依次加入
r.rpush('test_list2',0,1,2,3,4)
#返回列表目标范围内的数据
print(r.lrange('test_list2',0,-1))

#元素加入集合
r.sadd('test_set',0,1,2,3,4,5)
#打印集合内元素数量
print(r.scard('test_set'))
#重复元素加入集合
r.sadd('test_set',3)
#打印集合内元素数量
print(r.scard('test_set'))
#打印集合内元素
print(r.smembers('test_set'))
#判断元素是否在集合内
print(r.sismember('test_set',4))


stud = {
    'stu1':3.7,
    'stu2':4.0,
    'stu3': 3.0
}
#添加元素
r.zadd('test_zset',stud)
#打印集合内元素数量
print(r.zcard('test_zset'))
#打印集合内score在3.5至4.0之间的元素数量
print(r.zcount('test_zset',3.5,4.0))
#打印集合内score在3.5至4.0之间的元素
print(r.zrangebyscore('test_zset',3.5,4.0))





'''

#发布这
#推送信息
r.publish('channel1','test1234')


#订阅者
#初始化订阅
ps = r.pubsub()
#订阅频道
ps.subscribe('channel1')
for item in ps.listen():
    if item['type'] == 'message':
        print(item['data'])


'''

#引入用到的hash函数
import ghashfunc as ghashfunc
#键值key
tar_key = "bloomfilter"
#hash函数列表
hash_list = ["rs_hash", "js_hash", "pjw_hash", "elf_hash", "bkdr_hash",
                 "sdbm_hash", "djb_hash", "dek_hash"]
#目标URL
tar_url = "http://www.baidu1234.com"


#判断标志位
flag = False
for hash_func_str in hash_list:
    # 获得到hash函数对象
    hash_func = getattr(ghashfunc, hash_func_str)
    # 计算hash值
    hash_value = hash_func(tar_url)
    # 将hash值映射到[0, 2^32]区间
    real_value = hash_value % (1 << 16)
    # bitmap中对应位是0，则置为1，并说明此条目为新的条目
    if r.getbit(tar_key, real_value) == 0:
        r.setbit(tar_key, real_value, 1)
        flag = True
# 当所有hash值在bitmap中对应位都是1，说明此条目重复，返回False
print(flag)
